//
//  HOPPicturesView.swift
//  WB01
//
//  Created by HOP on 15/12/21.
//  Copyright © 2015年 HOP. All rights reserved.
//

import UIKit

import SDWebImage





// 放到类外面,全局都可以访问
// cell点击时通知的名称
let HOPStatusPictureViewCellSelectNotification = "HOPStatusPictureViewCellSelectNotification"
// cell点击时通知的indexPath的key
let HOPStatusPictureViewCellSelectIndexPathKey = "HOPStatusPictureViewCellSelectIndexPathKey"
// cell点击时通知的urls的key
let HOPStatusPictureViewCellSelectModelsKey = "HOPStatusPictureViewCellSelectModelsKey"
class HOPPicturesView: UICollectionView {

    // MARK: - 属性
    private let ReuseIdentifier = "PictureViewReuseIdentifier"
    /// 微博模型,用于显示图片和计算配图视图的尺寸
    var status: HOPStatus? {
        didSet {
        // 防止cell重用,需要刷新数据
        self.reloadData()
        }
    }
    /**
     计算配图的尺寸,根据模型里面图片的数量来计算
     
     - returns: 计算好的宽高
     */

    func calcViewSize() -> CGSize {
    // itemSize
    let itemSize = CGSize(width: 90, height: 90)
    // 间距
        let margin: CGFloat = 10
        // 设置layout的参数
    layout.itemSize = itemSize
    // 间距
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    
    // 获取图片数量,如果没有值,默认为0
    let count = status?.pictureURLs?.count ?? 0
        // 判断图片数量
        // 没有图片
        if count == 0 {
        return CGSizeZero
        
        }
    // 1张图片,返回图片的大小
        if count == 1 {
        var size = CGSize(width: 150, height: 120)
        let url = status?.pictureURLs![0]
            if let image = SDImageCache.sharedImageCache().imageFromDiskCacheForKey(url?.absoluteString) {
            size = image.size
            
            }
            // 判断,图片太小
            if size.width < 40 {
            size.width = 40
            }else if size.width > UIScreen.mainScreen().bounds.width * 0.5 {
            
            size.width = UIScreen.mainScreen().bounds.width * 0.5
            }
          // 设置itemSize
        layout.itemSize = size
            return size
        }
    // 设置间距
        layout.minimumInteritemSpacing = margin
        layout.minimumLineSpacing = margin
    // 4张图片
        if count == 4 {
        let value = 2 * itemSize.width + margin
        return CGSize(width: value, height: value)
        
        }
        // 其他情况
        // 列数,行数计算依赖列数,column必须为Int
    let column = 3
//     // 宽度 = 列数 * cell的宽度 + (列数 - 1) * 间距
    let width = CGFloat(column) * itemSize.width + (CGFloat(column) - 1) * margin
//        // 行数 = (图片的数量(Int) + 列数(Int) - 1) / 列数(Int)
    let row = (count + column - 1) / column
//    // 高度 = 行数 * cell的高度 + (行数 - 1) *  距
        let height = CGFloat(row) * itemSize.height + (CGFloat(row) - 1) * margin
    return CGSize(width: width, height: height)
     }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    private var layout = UICollectionViewFlowLayout()
    /// 外部调用没有参数的构造函数
    init() 
    {
    // 我们里面调用需要布局的构造函数
        super.init(frame: CGRectZero, collectionViewLayout: layout)
        backgroundColor = UIColor.clearColor()
    // 注册cell,使用自定义cell
       self.registerClass(HOPPictureViewCell.self, forCellWithReuseIdentifier: ReuseIdentifier)
//    // 设置数据源
    self.dataSource = self
        self.delegate = self
    }
    
   
 }
 // 扩展 CZStatusPictureView 实现UICollectionViewDataSource
extension HOPPicturesView: UICollectionViewDataSource,UICollectionViewDelegate {
    // 返回图片 cell的数量
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        // 没有图片返回0
        return status?.pictureURLs?.count ?? 0
    }
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        // 去缓存池中查找cell
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(ReuseIdentifier, forIndexPath: indexPath)  as! HOPPictureViewCell
        // 显示图片.设置图片的url
        cell.imageURL = status?.pictureURLs![indexPath.item]
        return cell
    }
    /// cell被点击
    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
         /*
        1.代理
        1. 1对1
        2. 可以有返回值
        3. 嵌套层次不要太深
        
        2.通知
        1. 1对多
        2. 没有返回值
        3. 嵌套层次无所谓
        注意:
        1.通知是同步的还是异步的
        2.在哪个线程发送通知,就再哪个线程接受通知
        */
        
        // 打印点击cell对应的小图和大图
//        let url = status?.pictureURLs![indexPath.item]
//        print("url: \(url)")
//        let largeUrl = status?.largeStorePictureURLS![indexPath.item]
//        print("largeUrl: \(largeUrl)")
        
        // 因为转场动画时需要知道缩略图ImageView的位置和图片,创建模型数组
        
        var photoBroswerModels = [HOPPhotoBrowserModal]()
        
        // 获取配图的数量
        let count = self.status!.largePictureURLs!.count
        print("获取配图的数量: \(count)")
        // 遍历每个缩略图.来创建模型数组
        for i in 0..<count {
        // 创建模型
        let model = HOPPhotoBrowserModal()
        // 设置模型大图url
        let url = self.status!.largePictureURLs![i]
        model.largeURL = url
        // 获取cell
        let cell = collectionView.cellForItemAtIndexPath(NSIndexPath(forItem: i, inSection: 0)) as! HOPPictureViewCell
        // 设置模型小图
            model.imageView = cell.imageView
            // 添加到模型数组
            photoBroswerModels.append(model)
        }
        
        
        
        
        // 使用通知,让微博配图的点击事件传递给控制器
        // 发送通知,需要传递2个数据,1配图的大图url数组,2点击cell的indexPath

        
        NSNotificationCenter.defaultCenter().postNotificationName(HOPStatusPictureViewCellSelectNotification, object: self, userInfo: [HOPStatusPictureViewCellSelectIndexPathKey : indexPath,HOPStatusPictureViewCellSelectModelsKey: photoBroswerModels])
    }
}

// 自定义cell
class HOPPictureViewCell: UICollectionViewCell {
    // MARK: - 属性
    /// 要显示图片的url
    var imageURL: NSURL? {
        didSet {
        // 显示图片
        imageView.sd_setImageWithURL(imageURL)
            // 判断一个地址是否是gif地址
            let gif = imageURL!.absoluteString.lowercaseString.hasSuffix("gif")
            // 如果是gif图片才显示gif图标
            gifImageView.hidden = !gif
        }
     }
    override init(frame: CGRect) {
        super.init(frame: frame)
        // 准备UI
        prepareUI()
    }
// MARK: - 准备UI
    private func prepareUI() {
    // 添加子控件
    contentView.addSubview(imageView)
    contentView.addSubview(gifImageView)
    // 添加约束
        imageView.ff_Fill(contentView)
        gifImageView.ff_AlignInner(type: ff_AlignType.BottomRight, referView: contentView, size: nil)
    }
    
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    // MARK: - 懒加载
    /// 图片
    private lazy var imageView:  UIImageView =  {
        let imageView = UIImageView(image: nil)
    // 设置图片的填充模式
    imageView.contentMode = UIViewContentMode.ScaleAspectFill
    // 裁剪
        imageView.clipsToBounds = true
        return imageView
    }()
/// gif图标
    private lazy var gifImageView: UIImageView = {
    let imageView = UIImageView()
    // 设置图片
    imageView.image = UIImage(named: "timeline_image_gif")
    return imageView
    }()
}


















